Page({
  data: {
    stockCode: '',  // 股票代码
    stockName: '',  // 股票名称
    currentPrice: 0, // 当前价格
    openPrice: 0,   // 开盘价
    prevClose: 0,   // 昨收价
    highPrice: 0,   // 最高价
    lowPrice: 0,    // 最低价
    volume: 0,      // 成交量
    amount: 0,      // 成交额
    changeAmount: 0, // 涨跌额
    changePercent: 0, // 涨跌幅
    time: '',       // 更新时间
    date: '',       // 更新日期
    buyPrices: [],  // 买盘价格
    buyVolumes: [], // 买盘数量
    sellPrices: [], // 卖盘价格
    sellVolumes: [], // 卖盘数量
    kLineType: 'min', // 默认分时图
    imageLoaded: false, // 图片加载状态
    imageError: false,  // 图片加载错误状态
    stock: {},
    currentTab: 'news',  // 默认显示新闻标签
    isInFavorites: false, // 是否已在自选股中
    newsList: [
      { id: 1, title: "海康威视：公司与华为达成战略合作，共同推进AI技术在安防领域的应用", time: "2023-10-05 10:30" },
      { id: 2, title: "中兴通讯：5G基站全球出货量突破10万台，市场份额稳步提升", time: "2023-10-05 09:15" },
      { id: 3, title: "格力电器：新一代节能空调获国家科技进步奖，能效比提升30%", time: "2023-10-04 16:45" },
      { id: 4, title: "阿里巴巴：第三季度财报超预期，云计算业务增长强劲", time: "2023-10-04 14:20" }
    ]
  },

  onLoad: function (options) {
    const { code } = options;
    // 根据传入的股票代码初始化页面
    this.setData({
      stockCode: code || 'sh601006' // 默认为大秦铁路
    });

    this.getStockData();

    // 定时刷新数据(交易时段内每5秒刷新一次)
    this.dataTimer = setInterval(() => {
      this.getStockData();
    }, 5000);

    // 设置导航栏标题为：股票名称（股票代码）
    wx.setNavigationBarTitle({
      title: `${this.data.stockName}（${this.data.stockCode}）`
    });
  },

  onShow: function () {
    // 每次显示页面时都检查该股票是否在自选股中
    this.checkIfInFavorites();
  },

  onUnload: function () {
    // 页面卸载时清除定时器
    if (this.dataTimer) {
      clearInterval(this.dataTimer);
    }
  },

  // 获取股票数据
  getStockData: function () {
    const that = this;
    wx.request({
      url: `https://hq.sinajs.cn/list=${this.data.stockCode}`,
      header: {
        'content-type': 'text/plain',
        'Referer': 'https://finance.sina.com.cn'
      },
      success(res) {
        // 解析返回的数据
        that.parseStockData(res.data);
      },
      fail(err) {
        console.error('获取股票数据失败', err);
        wx.showToast({
          title: '获取数据失败',
          icon: 'none'
        });
      }
    });
  },

  // 根据股票代码获取股票名称的备用方法
  getStockNameByCode: function (code) {
    // 常用股票代码和名称的映射
    const stockMap = {
      'sh600036': '招商银行',
      'sh601006': '大秦铁路',
      'sh601398': '工商银行',
      'sh601288': '农业银行',
      'sh601988': '中国银行',
      'sh601318': '中国平安',
      'sh600519': '贵州茅台',
      'sz000001': '平安银行',
      'sz000002': '万科A',
      'sz000333': '美的集团',
      'sz000651': '格力电器',
      'sz000858': '五粮液'
    };

    return stockMap[code] || code.substring(2); // 如果没有映射，返回股票代码数字部分
  },

  // 解析股票数据
  parseStockData: function (data) {
    try {
      // 提取数据字符串
      const regex = /=\"(.*)\";/;
      const matches = data.match(regex);

      if (matches && matches[1]) {
        const elements = matches[1].split(',');

        // 计算涨跌额和涨跌幅
        const currentPrice = parseFloat(elements[3]);
        const prevClose = parseFloat(elements[2]);
        const changeAmount = (currentPrice - prevClose).toFixed(2);
        const changePercent = ((changeAmount / prevClose) * 100).toFixed(2);

        // 整理买卖盘数据
        const buyPrices = [elements[11], elements[13], elements[15], elements[17], elements[19]];
        const buyVolumes = [elements[10], elements[12], elements[14], elements[16], elements[18]];
        const sellPrices = [elements[21], elements[23], elements[25], elements[27], elements[29]];
        const sellVolumes = [elements[20], elements[22], elements[24], elements[26], elements[28]];

        // 从API返回数据中获取股票名称（第0个位置）
        let stockName = elements[0] || this.getStockNameByCode(this.data.stockCode);

        // 更新数据
        this.setData({
          stockName: stockName,
          openPrice: parseFloat(elements[1]),
          prevClose: prevClose,
          currentPrice: currentPrice,
          highPrice: parseFloat(elements[4]),
          lowPrice: parseFloat(elements[5]),
          volume: (parseFloat(elements[8]) / 100).toFixed(0), // 转换为手
          amount: (parseFloat(elements[9]) / 10000).toFixed(2), // 转换为万元
          date: elements[30],
          time: elements[31],
          changeAmount: changeAmount,
          changePercent: changePercent,
          buyPrices: buyPrices,
          buyVolumes: buyVolumes,
          sellPrices: sellPrices,
          sellVolumes: sellVolumes
        });

        // 更新标题
        wx.setNavigationBarTitle({
          title: `${this.data.stockName}（${this.data.stockCode}）`
        });

        // 股票数据加载完成后，加载新闻
        this.loadStockNews();
      }
    } catch (error) {
      console.error('解析股票数据出错', error);
    }
  },

  // 切换K线图类型
  switchKLineType: function (e) {
    const type = e.currentTarget.dataset.type;
    this.setData({
      kLineType: type,
      imageLoaded: false,
      imageError: false
    });
  },

  // 图片加载成功
  handleImageLoad: function () {
    this.setData({
      imageLoaded: true,
      imageError: false
    });
  },

  // 图片加载失败
  handleImageError: function () {
    this.setData({
      imageLoaded: true,
      imageError: true
    });
    wx.showToast({
      title: '图表加载失败',
      icon: 'none'
    });
  },

  // 切换标签页
  switchTab: function (e) {
    const tab = e.currentTarget.dataset.tab;
    this.setData({
      currentTab: tab
    });
  },

  // 跳转到新闻详情页
  goToNewsDetail: function (e) {
    const newsId = e.currentTarget.dataset.id;
    const newsIndex = newsId - 1; // 数组索引从0开始

    // 获取当前新闻数据
    const currentNews = this.data.newsList[newsIndex];
    if (!currentNews) {
      wx.showToast({
        title: '新闻数据异常',
        icon: 'none'
      });
      return;
    }

    // 将新闻数据存储到全局，供新闻详情页使用
    const app = getApp();
    app.globalData.currentNews = {
      ...currentNews,
      stockName: this.data.stockName,
      stockCode: this.data.stockCode,
      stockPrice: this.data.currentPrice,
      stockChange: this.data.changePercent
    };

    // 跳转到新闻详情页
    wx.navigateTo({
      url: `/pages/news/index?id=${newsId}`
    });
  },

  // 检查是否在自选股中
  checkIfInFavorites: function () {
    const that = this;
    const app = getApp();

    // 如果用户未登录，不检查
    if (!app.globalData.isLogin) {
      this.setData({
        isInFavorites: false
      });
      return;
    }

    // 查询云数据库
    const db = wx.cloud.database();
    db.collection('selectedStock').where({
      _openid: app.globalData.openid
    }).get({
      success: function (res) {
        if (res.data && res.data.length > 0) {
          // 检查当前股票是否在自选股中
          const isInFavorites = res.data[0].stocks && res.data[0].stocks.some(code => code === that.data.stockCode);
          that.setData({
            isInFavorites: isInFavorites
          });
        } else {
          that.setData({
            isInFavorites: false
          });
        }
      },
      fail: function (err) {
        console.error('查询自选股失败', err);
        that.setData({
          isInFavorites: false
        });
      }
    });
  },

  // 添加到自选
  addToFavorites: function () {
    const that = this;
    const app = getApp();

    // 如果用户未登录，弹出登录页面
    if (!app.globalData.isLogin) {
      wx.navigateTo({
        url: '/pages/login/index'
      });
      return;
    }

    // 如果已经在自选股中，则删除
    if (this.data.isInFavorites) {
      this.removeFromFavorites();
      return;
    }

    // 显示加载中
    wx.showLoading({
      title: '添加中...'
    });

    const db = wx.cloud.database();

    // 查询用户的自选股记录
    db.collection('selectedStock').where({
      _openid: app.globalData.openid
    }).get({
      success: function (res) {
        if (res.data && res.data.length > 0) {
          // 已有记录，更新
          const docId = res.data[0]._id;
          const stocks = res.data[0].stocks || [];

          // 检查是否已存在
          if (stocks.includes(that.data.stockCode)) {
            wx.hideLoading();
            // 如果已存在，则直接更新状态而不是提示错误
            that.setData({
              isInFavorites: true
            });
            return;
          }

          // 添加新股票
          stocks.push(that.data.stockCode);

          // 更新数据库
          db.collection('selectedStock').doc(docId).update({
            data: {
              stocks: stocks,
              update_time: db.serverDate()
            },
            success: function () {
              wx.hideLoading();
              wx.showToast({
                title: '已添加到自选',
                icon: 'success'
              });
              that.setData({
                isInFavorites: true
              });
            },
            fail: function (err) {
              console.error('更新自选股失败', err);
              wx.hideLoading();
              wx.showToast({
                title: '添加失败',
                icon: 'none'
              });
            }
          });
        } else {
          // 新建记录
          db.collection('selectedStock').add({
            data: {
              stocks: [that.data.stockCode],
              create_time: db.serverDate(),
              update_time: db.serverDate()
            },
            success: function () {
              wx.hideLoading();
              wx.showToast({
                title: '已添加到自选',
                icon: 'success'
              });
              that.setData({
                isInFavorites: true
              });
            },
            fail: function (err) {
              console.error('添加自选股失败', err);
              wx.hideLoading();
              wx.showToast({
                title: '添加失败',
                icon: 'none'
              });
            }
          });
        }
      },
      fail: function (err) {
        console.error('查询自选股失败', err);
        wx.hideLoading();
        wx.showToast({
          title: '添加失败',
          icon: 'none'
        });
      }
    });
  },

  // 从自选股中删除
  removeFromFavorites: function () {
    const that = this;
    const app = getApp();

    // 显示加载中
    wx.showLoading({
      title: '删除中...'
    });

    const db = wx.cloud.database();

    // 查询用户的自选股记录
    db.collection('selectedStock').where({
      _openid: app.globalData.openid
    }).get({
      success: function (res) {
        if (res.data && res.data.length > 0) {
          const docId = res.data[0]._id;
          const stocks = res.data[0].stocks || [];

          // 移除股票
          const newStocks = stocks.filter(code => code !== that.data.stockCode);

          // 更新数据库
          db.collection('selectedStock').doc(docId).update({
            data: {
              stocks: newStocks,
              update_time: db.serverDate()
            },
            success: function () {
              wx.hideLoading();
              wx.showToast({
                title: '已从自选股移除',
                icon: 'success'
              });
              that.setData({
                isInFavorites: false
              });
            },
            fail: function (err) {
              console.error('移除自选股失败', err);
              wx.hideLoading();
              wx.showToast({
                title: '移除失败',
                icon: 'none'
              });
            }
          });
        }
      },
      fail: function (err) {
        console.error('查询自选股失败', err);
        wx.hideLoading();
        wx.showToast({
          title: '移除失败',
          icon: 'none'
        });
      }
    });
  },

  // 跳转到交易页面
  goToTrade: function () {
    wx.navigateTo({
      url: `/pages/moni/index?code=${this.data.stockCode}&name=${encodeURIComponent(this.data.stockName)}&price=${this.data.currentPrice}`
    });
  },

  // 显示更多选项
  showMoreOptions: function () {
    wx.showActionSheet({
      itemList: ['查看公司信息', '查看财务报表', '技术分析', '设置预警'],
      success: (res) => {
        // 根据用户选择执行相应操作
        switch (res.tapIndex) {
          case 0:
            // 查看公司信息
            break;
          case 1:
            // 查看财务报表
            break;
          case 2:
            // 技术分析
            break;
          case 3:
            // 设置预警
            break;
        }
      }
    });
  },

  // 分享功能
  onShareAppMessage: function () {
    return {
      title: `${this.data.stockName}（${this.data.stockCode}）`,
      path: `/pages/stock/index?code=${this.data.stockCode}`,
      imageUrl: `http://image.sinajs.cn/newchart/daily/n/${this.data.stockCode}.gif`
    };
  },

  // 分享到朋友圈
  onShareTimeline: function () {
    return {
      title: `${this.data.stockName}（${this.data.stockCode}）`,
      query: `code=${this.data.stockCode}`,
      imageUrl: `http://image.sinajs.cn/newchart/daily/n/${this.data.stockCode}.gif`
    };
  },

  // 加载股票新闻
  loadStockNews: function () {
    const that = this;
    const stockName = this.data.stockName;
    const stockCode = this.data.stockCode;

    console.log('开始加载新闻，股票名称:', stockName, '股票代码:', stockCode);

    // 如果股票名称为空，先使用智能生成的新闻
    if (!stockName || stockName === stockCode) {
      console.log('股票名称为空或未获取到，使用智能生成新闻');
      this.generateStockRelatedNews();
      return;
    }

    // 构建搜索关键词：优先使用股票名称，备选股票代码
    let searchQuery = stockName;

    // 如果股票名称包含中文，尝试使用英文关键词
    if (/[\u4e00-\u9fa5]/.test(stockName)) {
      // 根据常见中文股票名称映射到英文关键词
      const nameMapping = {
        '平安银行': 'Ping An Bank',
        '招商银行': 'China Merchants Bank',
        '工商银行': 'ICBC',
        '建设银行': 'China Construction Bank',
        '中国银行': 'Bank of China',
        '农业银行': 'Agricultural Bank of China',
        '中国平安': 'Ping An Insurance',
        '贵州茅台': 'Kweichow Moutai',
        '五粮液': 'Wuliangye',
        '万科A': 'China Vanke',
        '美的集团': 'Midea Group',
        '格力电器': 'Gree Electric'
      };

      searchQuery = nameMapping[stockName] || stockName;
    }

    // 确保搜索关键词不为空
    if (!searchQuery || searchQuery.trim() === '') {
      console.log('搜索关键词为空，使用智能生成新闻');
      this.generateStockRelatedNews();
      return;
    }

    console.log('使用搜索关键词:', searchQuery);

    // 调用聚合数据财经新闻API
    wx.request({
      url: 'https://apis.juhe.cn/fapigx/caijing/query',
      data: {
        key: '2ab8d2ff93bef7ee78c9f675bcfa915f'
      },
      header: {
        'content-type': 'application/json'
      },
      timeout: 10000, // 设置10秒超时
      success(res) {
        console.log('聚合数据请求成功，状态码:', res.statusCode);
        if (res.statusCode === 200 && res.data && res.data.reason === 'success' && res.data.result && res.data.result.newslist) {
          console.log('获取到财经新闻数据:', res.data.result.newslist.length, '条');
          that.parseJuheNewsData(res.data.result.newslist, searchQuery);
        } else {
          console.log('聚合数据返回格式异常:', res.data);
          // 如果API调用失败，使用智能生成的新闻
          that.generateStockRelatedNews();
        }
      },
      fail(err) {
        console.error('调用聚合数据API失败:', err);

        // 检查是否是域名白名单问题
        if (err.errMsg && err.errMsg.includes('request:fail')) {
          console.log('可能是域名白名单问题，请确保 apis.juhe.cn 已添加到合法域名列表');
          console.log('请在微信开发者工具中检查网络请求是否被阻止');
        }

        console.log('网络请求失败，使用智能生成新闻作为备选方案');
        // 如果API调用失败，使用智能生成的新闻
        that.generateStockRelatedNews();
      }
    });
  },

  // 解析聚合数据返回的财经新闻
  parseJuheNewsData: function (newslist, searchQuery) {
    try {
      // 智能筛选与股票相关的新闻
      const filteredNews = this.filterRelevantNews(newslist, searchQuery);

      const newsList = filteredNews.slice(0, 5).map((news, index) => {
        return {
          id: index + 1,
          title: news.title || '财经新闻',
          time: news.ctime || new Date().toISOString().substring(0, 16).replace('T', ' '),
          source: news.source || '财经资讯',
          url: news.url ? `https:${news.url}` : '', // 补全URL协议
          description: news.description || ''
        };
      });

      this.setData({
        newsList: newsList
      });

      console.log('成功加载聚合数据财经新闻:', newsList.length, '条');
    } catch (error) {
      console.error('解析聚合数据失败:', error);
      // 解析失败时使用智能生成的新闻
      this.generateStockRelatedNews();
    }
  },

  // 智能筛选与股票相关的新闻
  filterRelevantNews: function (newslist, searchQuery) {
    const stockName = this.data.stockName;
    const stockCode = this.data.stockCode;

    // 构建关键词列表
    const keywords = [
      stockName,
      searchQuery,
      stockCode.substring(2) // 去掉前缀的股票代码
    ].filter(Boolean);

    // 根据股票行业添加相关关键词
    const industryKeywords = this.getIndustryKeywords(stockName);
    keywords.push(...industryKeywords);

    console.log('筛选关键词:', keywords);

    // 筛选相关新闻
    const relevantNews = newslist.filter(news => {
      const title = news.title || '';
      const description = news.description || '';
      const content = (title + ' ' + description).toLowerCase();

      // 检查是否包含任何关键词
      return keywords.some(keyword => {
        if (!keyword) return false;
        return content.includes(keyword.toLowerCase()) ||
          content.includes(keyword) ||
          title.includes(keyword) ||
          description.includes(keyword);
      });
    });

    console.log('筛选出相关新闻:', relevantNews.length, '条');

    // 如果没有相关新闻，返回前几条财经新闻
    return relevantNews.length > 0 ? relevantNews : newslist.slice(0, 5);
  },

  // 根据股票名称获取行业关键词
  getIndustryKeywords: function (stockName) {
    if (!stockName) return [];

    const industryMap = {
      '银行': ['银行', '金融', '贷款', '存款', '利率', '央行'],
      '保险': ['保险', '金融', '理赔', '保费'],
      '证券': ['证券', '股票', '基金', '投资'],
      '地产': ['房地产', '地产', '楼市', '房价', '土地'],
      '汽车': ['汽车', '新能源', '电动车', '车企'],
      '医药': ['医药', '药品', '医疗', '生物', '疫苗'],
      '科技': ['科技', '技术', '互联网', '数字化', 'AI'],
      '能源': ['能源', '电力', '石油', '天然气', '煤炭'],
      '钢铁': ['钢铁', '钢材', '铁矿石', '金属'],
      '化工': ['化工', '化学', '石化', '材料']
    };

    const keywords = [];
    for (const [industry, words] of Object.entries(industryMap)) {
      if (stockName.includes(industry)) {
        keywords.push(...words);
        break;
      }
    }

    return keywords;
  },

  // 生成股票相关新闻
  generateStockRelatedNews: function () {
    const stockName = this.data.stockName;
    const stockCode = this.data.stockCode;
    const currentDate = new Date();

    // 根据股票代码和名称生成相关的新闻模板
    const getIndustryKeywords = (name, code) => {
      // 根据股票名称判断行业类型，生成相关关键词
      if (name.includes('银行')) return ['金融科技', '数字化转型', '风险管控', '普惠金融'];
      if (name.includes('科技') || name.includes('软件')) return ['人工智能', '云计算', '数字化', '技术创新'];
      if (name.includes('医药') || name.includes('生物')) return ['新药研发', '临床试验', '医疗器械', '生物技术'];
      if (name.includes('汽车')) return ['新能源', '智能驾驶', '产业升级', '技术突破'];
      if (name.includes('地产') || name.includes('建筑')) return ['城市更新', '绿色建筑', '智慧城市', '产业转型'];
      if (name.includes('能源') || name.includes('电力')) return ['清洁能源', '碳中和', '绿色发展', '能源转型'];
      return ['业务拓展', '战略合作', '技术升级', '市场开拓'];
    };

    const keywords = getIndustryKeywords(stockName, stockCode);

    const newsTemplates = [
      `${stockName}：${keywords[0]}领域取得重大进展，行业地位进一步巩固`,
      `${stockName}：与知名企业达成${keywords[1]}战略合作，共创发展新机遇`,
      `${stockName}：最新财报显示${keywords[2]}业务增长强劲，超市场预期`,
      `${stockName}：在${keywords[3]}方面实现重要突破，核心竞争力持续提升`,
      `${stockName}：董事会审议通过重要议案，加速推进${keywords[0]}战略布局`
    ];

    const newsList = newsTemplates.map((template, index) => {
      const newsDate = new Date(currentDate.getTime() - index * 24 * 60 * 60 * 1000);
      const hour = Math.floor(Math.random() * 12) + 8; // 8-19点
      const minute = Math.floor(Math.random() * 60);
      const timeStr = `${newsDate.getFullYear()}-${String(newsDate.getMonth() + 1).padStart(2, '0')}-${String(newsDate.getDate()).padStart(2, '0')} ${String(hour).padStart(2, '0')}:${String(minute).padStart(2, '0')}`;

      return {
        id: index + 1,
        title: template,
        time: timeStr
      };
    });

    this.setData({
      newsList: newsList
    });
  }
})